# Python 的字符串
from encodings.uu_codec import uu_encode
from requests.packages import imported_mod

from lxf_jack.Python_learning.python.base_01.If_else_Ways import user_name

#  ord()   获取字符的整数表示，chr()函数把编码转换为对应的字符
print(ord('A'))
print(ord('中'))
print(chr(66))
print(chr(22222))

#  len() 计算字符串的长度
print(len('i love China'))
print(len('111123234'))

#格式化
print('%2d-%02d'%(3,1))
print('%.2f'%3.12321)

# format  格式化字符串
print('Hello,{0},成绩提升了{1:.1f}%'.format('小明',17.124))

#f-string 用法
r=2.5
s=3.14 * r **2
print(f'The area of a circle with radius {r} is {s:.2f}')

#test1
s1 =72
s2= 85
r = (85-72)/72
print(f'小明的成绩上了{r:.1}个百分点')

#  字符串 索引
str_01 = 'Python'     # 将字符串Python赋值给变量str_01
str_01[0]             # 正数索引获取方式
str_01[-6]            # 负数索引获取

# 切片
str_02 = 'abcdefg'     # 将字符串 abcdefg 赋值给字符串str_02

print(str_02[1:])     # 获取 str_02从索引1开始的到最后一个的所有元素

print(str_02[:3])     # 获取索引0到3之间的所有元素，并输出

print(str_02[1:3])    # 获取索引1到索引3之间的所有元素，并输出

print(str_02[:-1])    # 获取索引0开始到最有一个元素之间的所有元素并输出

print(str_02[-3:-1])  # 获取索引-3开始到最后一个元素之间的所有元素，并输出

print(str_02[-3:])    # 获取索引中的最后三个元素

print(str_02[:])      # 获取索引中的所有元素

# 序列相加   +  两种相同类型的序列才能进行连接操作

str_1 = 'abc'  # 将字符串abc 的值赋值给字符串str_1
str_2 = 'efg'  # 将字符串efg 的值赋值给字符串str_2

str_3 = str_1+str_2   # 将连接后的字符串赋值给str_3
print(str_3)    # 输出拼接后的结果

#  乘法

strs= 'i love python!'  # 定义字符串并赋值
print(' '*10+'_'*15)   #利用序列的乘法运算输出10个空格和15个_
print(''*30)  #输出30个空格

# 长度  len()    最小值 min()  最大值 max()

strs =input('请输入一个字符串:')    # 输入字符串并赋值给变量strs
str_len=len(strs)        # 计算字符串长度并赋值给变量str_len
str_max=max(strs)        # 计算字符串中最大值并赋值给变量str_max
str_min = min(strs)      # 计算字符串中最小值并赋值给变量str_min

print('该字符串长度为:',str_len)  # 输出字符串的长度
print('该字符串中的最大字符为:',str_max)  # 输出最大字符
print('该字符串中的最小字符为:',str_min)  # 输出最小的字符

# 字符串格式化 %
a = 15   # 定义变量a并赋值
b = 12345678.1234567  # 定义变量b赋值
strs = 'i love python' # 定义字符串strs 并赋值
print('a=%05d'%a)   # 使用m 控制输出位数，空位补0
print('b=%8.3f'%b)  # 输出b,使用m,n 控制字符串长度和小数点位数
print('%17s'%strs)  # 输出m控制字符串长度
print('%17r'%strs)  # 使用%r输出字符串
print('%-17.5s'%strs) #使用-m.n进行左对齐，限制字符串长度和字符位数

# 字符串方法  find() 查找字符串
new_str='i like learning python'  # 创建字符串
a = new_str.find('like') # 在new_str中查找子串'like'
b = new_str.find('like',5,15) #在new_str的索引为5~15的字符串中查找子串
print(a)      # 输出a
print(b)      # 输出b

# count()方法  用于统计字符串中的某个字符出现的次数  str.count(sub[,start,[,end]])

new_str='this is a python book!'    # 创建字符串
a = new_str.count('is')   # 统计new_str中‘is'出现的次数
b = new_str.count('is',1,6)  # 设置开始和结束索引，统计'is'出现的次数
print(a)     # 输出a
print(b)     # 输出b

# split()     分隔符

new_str = 'this is an example of cutting'     # 创建空字符串
new_str.split()     # 以空字符为分割将字符串全部分割
new_str.split(' ',3)    # 以空字符分割三次字符串

# join 连接字符串

new_str = 'This is a python book!'    # 创建字符串'This is a  python book!'

'-'.join(new_str)    # 用 '-' 连接new_str中的字符

# replace()   用新字符替换新的字符  str.replace(old,new[,max])
new_str = 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday'

new_str.replace('day','Day')   # 将 new_str 中的 day 替换为 Day

new_str.replace('day','Day',3)   # 将new_str中的day替换为Day,限制为3次

# strip()    删除字符换两端连续的空白字符或者指定字符
new_str = '110This is an example 0001'  # 创建字符串
new_str.strip('1')       # 移除new_str 两侧的1
new_str.strip('01')      # 移除new_str 两侧的0和1

# lower()    将字符换中的所有大写字符为小写     upper()   将字符串中的所有小写字符换为大写
new_str = 'This is an EXAMPLE'    # 创建字符串
new_str.lower()       # 将所有大写字符换为小写
new_str.upper()       # 将所有小写字符换为大写

# 文本进度条
import time    # 导入time 模块
scale =10   # 变量 scale 用于表示输出进度条的精度
print('---------执行开始--------')   # 输出
for i in range(scale +1):       # 循环变量从0到10
    a = '***'*i      # 用 '*' 表示已完成的部分
    b = '..'*(scale-i)   # 用'.表示没有完成的部分
    c = (i/scale)*100    # 计算完成的百分比并赋值给c
    print('%{:^3.0f}[{}->{}]'.format(c,a,b))  # 格式化输出
    time.sleep(0.1)   # 暂停0.1秒
print('---------执行结束--------')

# 注册验证

user_name =input('请输入用户名(以“_”开头,3-30个字符)；')
password = input('请输入密码(由下划线，数字和字母共同组成，8-16个字符):')
if user_name[0] != '_':         # 如果user_name的首字符不是'_'
    print('用户名请使用下划线开头')  # 输出 '用户名请使用下划线开头'
elif 3>len(user_name) or 30<len(user_name):   # 如果user_name长度小于3或大于30
    print('用户名超出限制')                     # 输出'用户名长度超出限制'
elif 8>len(password) or 16<len(password):     # 如果password长度小于8或者大于16
    print('密码长度超出限制')                   #  输出’密码长度超出限制‘
elif password.find('_')==-1:                  # 如果password中不存在'_'
    print('密码中为输入下划线')                  # 输出'密码中为输入下划线'
else:
    passwords = password.replace('_','1')  # 将password 中的下划线替换为1
    if passwords.isalnum():    # passwords中是否只有数字或字母
        print('恭喜您，注册成功!用户名：')
    else:
        print('密码中有其他符号，注册失败!')
